package ooday05;

public class LiLun {
    /*
    访问控制修饰符
        作用：保护数据的安全（隐藏数据、暴露行为），实现封装
        设计：1)数据（成员变量）私有化（private）
             2)行为（方法）大部分公开化（public)
        共四中：
            1)public：公开的，任何类
            2)private：私有的，本类
            3)protected：受保护的，本类、子类、同包类
            4)默认的：什么也不写，本类、同包类
          访问权限由低到高依次为：
            private<默认的<protected<public
        类的访问权限只能是public或默认的
        类中成员的访问权限如上4种都可以
     */


    /*
    static关键字
        表示静态的
        可以设计：1.静态变量、2.静态块、3.静态方法
            1.静态变量
                由static修饰的成员变量即为静态变量
                成员变量分两种：
                    1)实例变量：
                        没有static修饰，属于对象，存储在堆中，有几个对象就有几份，由对象/引用访问
                    2)静态变量：
                        有static修饰，属于类，存储在方法区中，只有一份，由类名访问
                static静态变量何时用：
                    对象所共享的数据
            2.静态块
                由static修饰的语句块即为静态块
                属于类，在类被加载期间自动执行，一个类只被加载一次，静态块只执行一次
                何时用：
                    初始化/加载静态资源
            3.静态方法
                由static修饰的方法即为静态方法
                属于类，存储在方法区中，只有一份
                常常通过类名点来访问
                静态方法中没有隐式this传递，所以静态方法中不能直接访问实例成员（实例变量/实例方法）
                何时用：
                    方法的操作与对象无关（不需要访问对象的属性/行为）
     */


    public static void main(String[] args) {
        B b = new B();
    }
}
class A{
    A(){
        System.out.println("父构造");
    }
    {
        System.out.println("父代码块");
    }
    static {
        System.out.println("父静态代码块");
    }
}
class B extends A{
    B(){
        System.out.println("子构造");
    }
    {
        System.out.println("子代码块");
    }
    static {
        System.out.println("子静态代码块");
    }
}
    /*
    执行顺序
        子静态-->子代码块-->子构造
        父静态-->子静态-->父代码块-->父构造-->子代码块-->子构造
     */


    /*
    static final常量
        由static和final共同修饰的成员变量，即为常量
        建议：
            常量名所有字母都大写，多个单词之间用_分隔 ---->CLASS_NAME
        必须声明同时初始化
        常常是通过类名来访问
        常量在编译时，会将常量直接替换为具体的数，效率高
        何时用：
            在程序运行过程中数据永远不变，并且经常使用
            假设：
                PI的值3.14159在程序10个地方需要用到
                不用常量：
                    在10个地方都写3.14159 -------------------写起来麻烦、不容易统一
                用常量：
                    设计常量PI存储3.14159，直接使用常量 --------写起来方便、容易统一
     */

    /*
    枚举
       是种引用数据类型
       枚举类型的对象数目是固定的，常常用于定义一组常量
       枚举的构造方法都是私有的
       枚举第一行默认都是罗列枚举对象名称
       枚举默认都继承自Enum类，其中提供了一组方法供我们使用

     */














